계산 물리학에서 근본적인 마찰은 컴퓨터가 실수를 이진 부동소수점 수학을 사용해 표현하기 때문에 발생합니다. 인간은 10진법(십진법)으로 생각하지만, 하드웨어는 이진법(기저 2)으로 값을 저장합니다. 이로 인해 누수 있는 추상화라는 현상이 나타납니다. 예를 들어 0.1과 같은 간단한 십진 분수는 정확히 표현될 수 없습니다.
1. 부동소수점의 진실
Go는 실수를 위한 두 가지 주요 타입을 제공합니다: float32 및 float64입니다. 예를 들어 변수 선언 구문인 price := 0.0을 사용할 때, Go는 기본적으로 float64을 선택합니다. 이러한 타입들은 정확한 수학적 값이 아니라 현실에 대한 근사값입니다.
2. 0.1의 미스터리
10진법에서는 $1/3$이 무한 반복 소수($0.333...$)가 됩니다. 그러나 이진법에서는 값 $0.1$이 무한 반복 분수가 됩니다. 컴퓨터 메모리는 유한하므로, 이 분수는 잘려나가며 누적 오류를 초래합니다. 예를 들어 $0.1 + 0.2$는 정확히 $0.3$이 아니라 $0.30000000000000004$가 됩니다.
경고: 절대 == 논리 게이트에서 부동소수점을 비교하는 데 사용해서는 안 됩니다. 이러한 미세한 차이는 비교를 실패하게 만들기 때문입니다.
TERMINALbash — 80x24
> Ready. Click "Run" to execute.
>